Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 08-02-2012, 19:25. Υπάρχουν 12 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-02-2012, 13:55 69199

    Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Ο τίτλος πάνω κάτω τα λέει όλα... :Ρ

    Αλλά ας εξηγήσουμε ^^


    Έχω ένα Data Grid View, και έχω γράψει κώδικα όπου μπορεί κάποιος να κάνει Import ένα αρχείο κειμένου, ή να βάλει τις δικές του μεταβλητές με δικά του ονόματα.

    Όταν πας να βάλεις τα colums είναι τόσο απλό όσο:

    1
    2
    3
    4
    5
    6
     
                For i = 0 To txtDatasetNames.Lines.Length - 1       'Appending new data
                    If txtDatasetNames.Lines(i) <> "" Then
                        frmMain.dgvData.Columns.Add(txtDatasetNames.Lines(i), txtDatasetNames.Lines(i))
                        frmMain.dgvData.Columns(frmMain.dgvData.Columns.Count - 1).SortMode = DataGridViewColumnSortMode.NotSortable
                    End If
                Next

    Μετά όμως, αν θέλω να αλλάξω το όνομα που είχα βάλει??

    Ή αν χρησιμοποίησα το import οπότε μπήκαν ότι ονόματα είχε στο αρχείο? Πως τα αλλάζω?

    Το  Data Grid View δεν δέχετε δεξί κλικ στα columns...  


    Ευχαριστώ εκ των προτέρων!

    (Υ.Γ. έχω άλλη μια ερώτηση, εδώ: http://www.dotnetzone.gr/cs/forums/thread/69190.aspx )


  •  08-02-2012, 14:10 69201 σε απάντηση της 69199

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

     dgvData.Columns[colNumber].HeaderText = "new text";

  •  08-02-2012, 14:17 69202 σε απάντηση της 69201

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Ναι, το θέμα είναι που να το βάλω αυτό τον κώδικα??

    δεν έχει δεξί κλικ στο Column Name στο dgv........

    μπορώ να βάλω εγώ???? και να προσθέσω την επιλογή "Rename" για να γράψω αυτόν τον κώδικα μετά??


  •  08-02-2012, 14:35 69204 σε απάντηση της 69202

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Πρέπει στο ColumnHeaderMouseClick event ( εφόσον είναι δεξί ) του DGV να εμφανίζεις ένα ContextMenu με επιλογή "Rename". Το click του "Rename" να δίνει τη δυνατότητα στο χρήστη να γραφεί σε κάποιο textBox το νέο όνομα... και να γράψεις τον παραπάνω κώδικα. 

    Είναι κάπως ανορθόδοξος τρόπος... αλλά δεν είναι συνηθισμένο να αλλάζει ο χρήστης τα ονόματα στις στήλες.
  •  08-02-2012, 15:36 69206 σε απάντηση της 69204

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Ευχαριστώ!

    Είμαι πολύ κοντά τώρα, εμφανίζεται ένα μενού με χώρο για να γράψω το όνομα... απλώς δεν ξέρω πως να αναγνωρίζω αν το κουμπί που πατήθηκε είναι το enter ή όχι..

    Και το χρειάζομαι αυτό, γιατί βλέπεις θέλω να αλλάζει το όνομα μόνο άμα πατήσει έντερ ο άλλος.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
        Private Sub dgvData_ColumnHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvData.ColumnHeaderMouseClick
            If e.Equals(MouseButtons.Right) Then
                cmsColumnRen.Show()
            End If
        End Sub
    
        Private Sub txtColumnRen_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtColumnRen.KeyPress
            MsgBox(e.KeyChar)
            If sender.ToString = (Keys.Enter.ToString) Then
                If txtColumnRen.Text <> "" Then
                    dgvData.SelectedColumns(dgvData.SelectedColumns.Count - 1).HeaderText = txtColumnRen.Text
                    txtColumnRen.Text = ""
                End If
            End If
        End Sub
    
        Private Sub txtColumnRen_LostFocus(sender As Object, e As System.EventArgs) Handles txtColumnRen.LostFocus
            txtColumnRen.Text = ""
        End Sub

    Το έψαξα, δοκίμασα και στο "Sender" και στο "e"

    τα GetType, ToString, KeyChar και διάφορα.. αλλά κανένα δεν μου δίνει τη δυνατότητα να ελέγξω αν είναι το έντερ που πατήθηκε.. όλα βλακείες μου γυρνάνε πίσω..


  •  08-02-2012, 15:49 69208 σε απάντηση της 69206

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Για δεξί κλικ του DGV γράψε αυτό
       if(e.Button == MouseButtons.Right)

    Στο textbox κοίτα το KeyUp event και έλεγξε το Enter.
         if(e.KeyCode == Keys.Enter)
                    



  •  08-02-2012, 16:08 69210 σε απάντηση της 69208

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Δουλεύει, ναι !!! :)


    Το τελευταίο θέμα μου τώρα είναι το εξής:

    Νόμιζα ότι όταν κάποιος θα έκανε κλίκ πάνω στο όνομα του column, θα απεπιλέγονταν όλα τα άλλα, και θα επιλέγονταν μόνο αυτό. Με αυτή τη λογική έκανα την εξής σειρά:

    1
     
                    dgvData.SelectedColumns(dgvData.SelectedColumns.Count - 1).HeaderText = txtColumnRen.Text
    Ωστόσο, δεν γίνεται έτσι..

    Όταν κάποιος κάνει δεξί κλικ στο όνομα του column, όλα μένουν ως είχαν. Άρα αν δεν είχε επιλέξει τίποτα, θα έχουμε πρόβλημα..

    και αν είχε επιλέξει κάτι άλλο.. τότε αντί να μετονομαστεί η στήλη που έγινε δεξί κλικ, θα μετονομαστεί η τελευταία επιλεγμένη στήλη..


    Ουσιαστικά η ερώτησή μου είναι: Πως μπορώ να κάνει retrieve το index του column που έγινε δεξί κλικ έτσι ώστε να γράψω

    1
    2
    3
    4
    5
    6
     
            If e.KeyCode = Keys.Enter Then
                If txtColumnRen.Text <> "" Then
                    dgvData.SelectedColumns(RenamingColumnIndex).HeaderText = txtColumnRen.Text
                    txtColumnRen.Text = ""
                End If
            End If

    αντί για 

    1
     
                    dgvData.SelectedColumns(dgvData.SelectedColumns.Count - 1).HeaderText = txtColumnRen.Text
    ??


  •  08-02-2012, 16:19 69211 σε απάντηση της 69210

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Πρόσθεσε ένα member:
     int currentColumnIndex = -1;

    Μέσα στο dgv_ColumnHeaderMouseClick γράψε :
         currentColumnIndex = e.ColumnIndex;

    Αυτό είναι το index που θες. 
    Μην ξεχνάς να το κάνεις -1 μετά την μετονομασία.
  •  08-02-2012, 16:46 69213 σε απάντηση της 69211

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Οκ, όλα δουλεύουν ρολόι.

    Αυτό που θέλω γίνετε, αλλά το menu εμφανίζεται πρώτα έξω απο το παράθυρο του προγράμματος (για την ακρίβεια, εμφανίζεται στην αρχή της οθόνης μου, τέρμα πάνω αριστερά)

    και αν το πατήσω και δεύτερη φορά, τότε εμφανίζεται κάτω απο το column name.


    Δεν μπορώ να το βάλω απο το GUI το dgv να έχει σαν ContextMenuStrip το cmsColumnRen γιατί τότε δεν δουλεύει τίποτα..

    μόνο αν το κάνω μέσα στο πρόγραμμα, και μετά όταν κλείνει το βγάζω, δουλεύει. Αλλιώς δεν λειτουργεί καθόλου ο κώδικας.

    Δεν βγάζει νόημα όλο αυτό όμως... γιατί να παίρνει το position με την δεύτερη και όχι με την πρώτη ??

    (Κάτω είναι ο κώδικας)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
        Private Sub dgvData_ColumnHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvData.ColumnHeaderMouseClick
            If e.Button = MouseButtons.Right Then
                CurrentColumnIndex = e.ColumnIndex
                dgvData.ContextMenuStrip = cmsColumnRen
                cmsColumnRen.Show()
                cmsColumnRen.Location = New Point(e.Location.X, e.Location.Y)
            End If
        End Sub
    
        Private Sub txtColumnRen_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtColumnRen.KeyUp
            If e.KeyCode = Keys.Enter Then
                If txtColumnRen.Text <> "" AndAlso CurrentColumnIndex >= 0 Then
                    dgvData.Columns(CurrentColumnIndex).HeaderText = txtColumnRen.Text
                    CurrentColumnIndex = -1
                    txtColumnRen.Text = ""
                    cmsColumnRen.Close()
                    dgvData.ContextMenuStrip = Nothing
                End If
            End If
        End Sub
    
        Private Sub txtColumnRen_LostFocus(sender As Object, e As System.EventArgs) Handles txtColumnRen.LostFocus
            txtColumnRen.Text = ""
            cmsColumnRen.Close()
            dgvData.ContextMenuStrip = Nothing
        End Sub


  •  08-02-2012, 17:29 69217 σε απάντηση της 69213

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Σβήσε το 
    dgvData.ContextMenuStrip = cmsColumnRen
    διότι θα σου εμφανίζει το context όταν κάνεις δεξί κλικ οπουδήποτε μέσα στο dgv.

    Στο ColumnHeaderMouseClick βάλε:
       cmsColumn.Show(Cursor.Position);
    και σβήσε τον κώδικα για Location

    To txtColumn είναι στο contextMenu? Το Lost_Focus δε νομίζω να χρειάζεται.




     
  •  08-02-2012, 17:51 69220 σε απάντηση της 69217

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        Private Sub dgvData_ColumnHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvData.ColumnHeaderMouseClick
            If e.Button = MouseButtons.Right Then
                CurrentColumnIndex = e.ColumnIndex
                cmsColumnRen.Show(Cursor.Position)
                txtColumnRen.Focus()
            End If
        End Sub
    
        Private Sub txtColumnRen_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtColumnRen.KeyUp
            If e.KeyCode = Keys.Enter Then
                If txtColumnRen.Text <> "" AndAlso CurrentColumnIndex >= 0 Then
                    dgvData.Columns(CurrentColumnIndex).HeaderText = txtColumnRen.Text
                    dgvData.Columns(CurrentColumnIndex).Name = txtColumnRen.Text
                    CurrentColumnIndex = -1
                    txtColumnRen.Text = ""
                    cmsColumnRen.Close()
                    dgvData.ContextMenuStrip = Nothing
                End If
            End If
        End Sub


    Δουλεύει!!

    Ευχαριστώ πολύ :)


  •  08-02-2012, 18:43 69221 σε απάντηση της 69199

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    Δες και αυτόν τον τρόπο αν θες.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Public Class Form1
        Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
            Dim dt As New DataTable
            Dim r As DataRow
    
            dt.Columns.Add("ID", GetType(Integer))
            dt.Columns.Add("DESCRIPTION", GetType(String))
    
            For i As Integer = 1 To 10
                r = dt.NewRow
    
                r.Item("ID") = i
                r.Item("DESCRIPTION") = "Desc" & i
                dt.Rows.Add(r)
            Next
    
            Me.DataGridView1.DataSource = dt
        End Sub
    
        Private Sub DataGridView1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseUp
            If TypeOf e Is MouseEventArgs Then
                Dim meArgs As MouseEventArgs = DirectCast(e, MouseEventArgs)
    
                If meArgs.Button = Windows.Forms.MouseButtons.Right Then
                    Dim htInfo As DataGridView.HitTestInfo = Me.DataGridView1.HitTest(meArgs.X, meArgs.Y)
    
                    If htInfo.Type = DataGridViewHitTestType.ColumnHeader Then
                        Dim ctm As New ContextMenuStrip
                        Dim tst As New ToolStripTextBox
    
                        AddHandler tst.KeyDown, Sub(s As Object, ev As KeyEventArgs)
                                                    If ev.KeyCode = Keys.Enter Then
                                                        Me.DataGridView1.Columns(htInfo.ColumnIndex).HeaderText =
                                                            DirectCast(s, ToolStripTextBox).Text
    
                                                        ctm.Close()
                                                        ctm.Dispose()
                                                    End If
                                                End Sub
    
                        tst.Text = Me.DataGridView1.Columns(htInfo.ColumnIndex).HeaderText
                        ctm.Items.Add(tst)
    
                        ctm.Show(Me.DataGridView1.PointToScreen(New Point(e.X, e.Y)).X,
                                 Me.DataGridView1.PointToScreen(New Point(e.X, e.Y)).Y)
    
                    End If
                End If
            End If
    
        End Sub
    End Class

  •  08-02-2012, 19:25 69223 σε απάντηση της 69221

    Απ: Πως αλλάζει το text ενός column απο ένα dgv σε runtime?

    ουαααου!

    Αυτό έχει πολλά καινούργια (για μένα) πράγματα μέσα.


    Χαίρομαι :)

    όπως πάντα, θα το μελετήσω μέχρι να καταλάβω τα πάντα και θα απαντήσω όταν είμαι θετικός ότι κατάλαβα. ή αν έχω απορίες... :Ρ


    Thank you!


Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems